﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct Human
{
	char a;//1
	int b;//4	//8
	char c;//1
	int d;//4   //8   //16
};
void testAssign()
{
	int a = 10;
	//1.直接赋值；
	a = 100;

	//2.间接赋值；
	int* p = &a;
	*p = 200;

	struct Human h = { 'a',100,'b',200 };
	printf("3.输出结构体变量h的成员d的值h.d：%d\n", h.d);//200
	//4.直接赋值；
	h.d = 1000;
	printf("5.直接对结构体变量h的成员d进行赋值，则h.d：%d\n", h.d);//1000

	//9.主要是pp置为NULL了，所以地址值就从0算起了；
	int* pp = NULL;
	printf("7.输出指针变量pp的地址：%d\n", pp);//0
	printf("8.输出指针变量pp+1的地址：%d\n", pp + 1);//4

	//6.间接赋值；
	printf("10.输出结构体变量h的成员d的地址：%d\n", &(h.d));//5502760
	//13.不能用*(char*(&h)+12)，因为(char*)&h+12得到的是char*类型的指针所对应的地址，直接取值会得到char类型值；
	printf("11.按照内存对齐，结构体变量h的成员d的地址：%d\n", (char*)&h + 12);//5502760
	printf("12.用int*类型指针取，结构体变量h的成员d的地址，再获取到该地址对应的值：%d\n", *(int*)((char*)&h + 12));//1000
}

//main180：变量的赋值
int main180()
{
	testAssign();

	system("pause");
	return EXIT_SUCCESS;
}